#ifndef QLSVTABWIDGET_H
#define QLSVTABWIDGET_H

#include <QTabWidget>

#include "dllQLsPluginsManagerAppfwk_global.h"
#include "qlsvtabbar.h"
#include "qlspluginsmanagertablewidget.h"

class DLLQLSPLUGINSMANAGERAPPFWK_EXPORT QLsPluginsManagerAppfwk : public QTabWidget
{
	Q_OBJECT
public:
	/* 标签样式 */
	enum QLsTabStyle
	{
		NORTH = 0, WEST
	};

	QLsPluginsManagerAppfwk(QWidget *parent = nullptr);
	~QLsPluginsManagerAppfwk();

	/* 标签样式 */
	QLsTabStyle tabStyle() const;
	void setTabStyle(const QLsTabStyle &tabStyle);

	/* 当前主题名 */
	QString curThemeName() const;
	void setCurThemeName(const QString &curThemeName);

	/* 插件路径 */
	QString pluginsDir() const;
	void setPluginsDir(const QString &pluginsDir);

	/* 插件信息配置文件路径 */
	QString pluginsIniDir() const;

	/* 获取插件管理器类接口 */
	QLsPluginsManagerTableWidget *GetPluginsManagerTableWidget();

	/* 获取插件窗口 */
	QWidget *GetPluginsWidgetByIndex(int index);
	QWidget *GetPluginsWidgetByPluginsName(const QString &pluginsName);
	inline QWidget *GetPluginsWidgetByPluginInfo(PluginInfo &pluginInfo)
	{ return GetPluginsWidgetByPluginsName(pluginInfo.m_interfaceInfo->m_name); }

	/* 加载全部插件 */
	void LoadAllPlugin();

	/* 是否显示插件管理器界面 */
	bool isShowPluginsManagerTab() const;
	void setIsShowPluginsManagerTab(bool isShowPluginsManagerTab);

	/* 主题管理器 */
	QLsThemesManager *themesManager() const;

	/* 是否隐藏标签栏 */
	bool bHideTabBar() const;
	void setBHideTabBar(bool bHideTabBar);

signals:
	/* 加载结果的信号 */
	void sigLoadRes(PluginInfo&);
	/* 最小尺寸变化的信号 */
	void sigChangeMinimumSize(QSize);

public slots:
	/* 加载、卸载插件的槽函数 */
	void slotPluginLoad(PluginInfo &pluginInfo);
	/* 插件的最小尺寸变化的槽函数 */
	void slotPluginsChangeMinimumSize();

private:
	/* 主界面初始化 */
	void HomeInit();
	/* 填充插件窗口 */
	void PopulateWindows(const PluginInfo &info);
	/* 移除插件窗口 */
	void RemoveWindows(const PluginInfo &info);
	/* 更新最新尺寸 */
	void UpdateMinimumSize();

private:
	QLsPluginsManagerTableWidget *pluginsManagerTableWidget;
	QTabBar *hTabBar;
	QLsVTabBar *vTabBar;

	int m_tabWidgetMiniWidth;
	int m_tabWidgetMiniHeight;

	bool m_isShowPluginsManagerTab;					/* 是否显示插件管理器界面 */
	QLsTabStyle m_tabStyle;							/* 标签样式 */

	QString m_curThemeName;							/* 当前主题名 */

	QString m_pluginsDir;							/* 插件路径 */
	QString m_pluginsIniDir;						/* 插件信息配置文件路径 */

	QStringList m_pluginsNameList;					/* 插件名列表，按ui->showTabWidget顺序 */

	bool m_bHideTabBar;								/* 是否隐藏标签栏 */
};

#endif // QLSVTABWIDGET_H
